第3节 大白自动追踪


通过拍照、爬虫等方式获取待训练图片,使用python进行简单的文件处理,用OpenCV训练后,可实现对特定物体的识别和追踪

级联分类器简介

目前图像检测方法主要分为两大类,基于知识基于统计

以人脸检测来说,基于知识的人脸检测方法主要包括:模板匹配,人脸特征,形状与边缘,纹理特征,颜色特征。

基于统计的人脸检测方法主要包括:主成分分析与特征脸法,神经网络模型,隐马尔可夫模型,支持向量机,Adaboost算法。

基于知识的方法将人脸看成不同特征的特定组合,即通过人脸的眼睛、嘴巴、鼻子、耳朵等特征及其组合关系来检测人脸。

基于统计的方法将人脸看成统一的二维像素矩阵,通过大量的样本构建人脸子空间,通过相似度的大小来判断人脸是否存在。

OpenCV采用的级联分类器,可以理解为将采用Adaboost算法构建的若干分类器串联起来,即级联。只有通过所有分类器后才识别为检测正确。这样可以提高检测的准确度。 1446497-20180809111640447-741585916

OpenCV提供了若干已经提前训练好的级联分类器供使用,包括人体、人脸、猫咪等。 微信截图_20190808123116

示例:识别猫脸

核心代码:

String catFileName = "~/opencv/build/etc/haarcascades/haarcascade_frontalcatface.xml"
CascadeClassifier catclassifier

结果: 微信截图_20190808132617

活动1:人脸分类器:追着人跑的大白

原理图

摄像头->大白\n树莓派: CSI/USB
大白\n树莓派-->Arduino: 串口指令
Note right of 大白\n树莓派: OpenCV处理摄像头数据(级联分类器)\n发送指令给Arduino

硬件准备

  • 大白车

  • Arduino

  • CSI摄像头

  • 待识别的人或猫的照片(电子或纸质打印任选)

硬件连接

  • 将烧录好程序的Arduino通过USB连接到树莓派

启动追踪小车

1.使用远程桌面或HDMI视频输出连接到树莓派

2.打开终端,输入cd ~/Desktop/learn-ai/codes/chapter4/part3_AutoTrack/AutoTrack

3.输入python tracker.py

4.将待识别的物体(人脸或猫)在车前移动,观察车的追踪行为

活动2:训练新的分类器

通过收集大量样本图片,可以训练自定义的分类器,可以识别任意的物体。

1.环境准备

在Windows桌面上执行:

  • 新建一个文件夹,重命名为待检测的物体名称(英文),比如检测移动电源,就命名为yidongdianyuan

  • 进入文件夹,再新建两个文件夹,分别命名为pn,p代表positive(正样本),n代表negative(负样本)

微信截图_20191209141135

2.收集负样本

训练样本包括正样本和负样本。正样本,通俗点说,就是图片中只有你需要的目标。而负样本的图片只要其中不含有目标就可以了。但需要说明的是,负样本也并非随便选取的。 例如,需要检测的目标是汽车,那么正样本就应该是仅仅含有汽车的图片,而负样本显然不能是一些包含天空的,海洋的,风景的图片。因为最终训练分类器的目的是检测汽车,而汽车应该出现在马路上。也就是说,分类器最终检测的图片应该是那些包含马路,交通标志,建筑物,广告牌,汽车,摩托车,三轮车,行人,自行车等在内的图片。很明显,这里的负样本应该是包含摩托车、三轮车、自行车、行人、路面、灌木丛、花草、交通标志、广告牌等。 Adaboost方法是机器学习中的一个经典算法,而机器学习算法的前提条件是,测试样本和训练样本独立同分布。所谓的独立同分布,可以简单理解为:训练样本要和最终的应用场合非常接近或者一致。否则,基于机器学习的算法并不能保证算法的有效性。此外,足够的训练样本(至少得几千张正样本、几千张负样本)也是保证训练算法有效性的一个前提条件。

使用网络浏览器或各种方法,收集各种图片,但是不能包含待检测的物体(移动电源)。保存在n文件夹中。数量为数十个为宜。

微信截图_20191209141601

3.收集正样本

正样本就是想要识别出来的物体。尽可能排除无关物体的干扰(图片中无其他物体)

使用手机,拍摄待识别的物体,并将其存储在p文件夹。数量在10个以上为宜。

51ed384b11d617f32a9f22a93311168

微信截图_20191209140911

4.图片预处理

这一步骤调整正负样本的图片分辨率。

  • 打开MtPcl.exe,选择添加文件夹,选择p文件夹 微信截图_20191209142158

  • 选择右侧修改尺寸,高度设置为480,勾选保持原图比例。然后选择下面的覆盖原图。点击保存。 微信截图_20191209142330

  • 点击清空,并对n文件夹执行相同的操作 微信截图_20191209142542

5.训练分类器

  • 打开Cascade-Trainer-GUI 微信截图_20191209142731

  • 点击Browse,选择包含np的文件夹 微信截图_20191209143341

路径中不能包含中文

  • 单击Common选项卡,调整第一项Number of Stages,选择10获得更快的训练速度,如果效果不明显可以逐渐增大,但是训练速度会显著增加。 微信截图_20191209143627

  • 修改宽度和高度为2030。使宽高比和待处理的文件相同。 微信截图_20191209144221

  • 点击Start开始训练 微信截图_20191209143833

  • 训练成功后,在原文件夹中会增加一个classifier文件夹,里面的cascade.xml就是训练成功的级联分类器。 微信截图_20191209144021

6.测试

  • 选择Test选项卡,点击右上角Browse,选择上一步的cascade.xml
  • 输入设置,选择Single Image,测试图片可以是包含多个目标物体的图片或截图
  • 选择输出方式为Result Image in a Folder,并指定路径
  • 点击Start,最小检测阈值输入1010;最大检测阈值输入800800(可以不断调整以取得最好的效果) sdsadsds

  • 检测效果 微信截图_20191209145205

活动3:应用新的分类器

cascade.xml通过U盘拷贝到树莓派的路径下 微信截图_20191209145535

打开终端,执行:

cd ~/Desktop/learn-ai/codes/chapter4/part3_AutoTrack/AutoTrack
python tracker_my_object.py

大白将会跟随训练的物体进行移动。

© 北京师范大学智慧学习研究院 all right reserved,powered by Gitbook修订时间: 2020-10-28

results matching ""

    No results matching ""

    results matching ""

      No results matching ""